﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>


typedef int SLTDataType;
typedef struct SListNode//节点结构包括：一个节点包括数据和下一个节点地址
{
	SLTDataType data; //节点数据
	struct SListNode* next; //指针变量⽤来保存下⼀个节点的地址
}SLTNode;

//链表打印
void SLTPrint(SLTNode* phead)
{
	SLTNode* pcur = phead;
	while (pcur)
	{
		printf("%d ", pcur->data);
		pcur = pcur->next;
	}
}
SLTNode* SLTBuyNode(SLTDataType x)
{
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		exit(1);
	}
	newnode->data = x;
	newnode->next = NULL;
	return newnode;
}
//尾部插⼊
void SLTPushBack(SLTNode** pphead, SLTDataType x)
{
	assert(pphead);
	SLTNode* newnode = SLTBuyNode(x);
	if (*pphead == NULL)
	{
		*pphead = newnode;
	}
	else
	{
		SLTNode* ptail = *pphead;
		while (ptail->next)
		{
			ptail = ptail->next;
		}
		ptail->next = newnode;
		ptail = newnode;
	}
}

//销毁链表
void SListDesTroy(SLTNode** pphead)
{
	assert(*pphead && pphead);
	SLTNode* pcur = *pphead;
	while (pcur)
	{
		SLTNode* next = pcur->next;
		free(pcur);
		pcur = next;
	}
	*pphead = NULL;
}

//链表求和
//int main() {
//	SLTNode* s = NULL;
//	int n;
//	int arr[256];
//	int sum = 0;
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//		SLTPushBack(&s, arr[i]);
//	}
//	while (s)
//	{
//		sum += s->data;
//		s = s->next;
//	}
//	printf("%d", sum);
//	//SListDesTroy(&s);
//	return 0;
//}

//双链表求和
//int main()
//{
//	SLTNode* s1 = NULL;
//	SLTNode* s2 = NULL;
//	SLTNode* s3 = NULL;
//	int n;
//	int arr1[200];
//	int arr2[200];
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++)
//	{
//		scanf("%d", &arr1[i]);
//		SLTPushBack(&s1, arr1[i]);
//	}
//	
//	for (int i = 0; i < n; i++)
//	{
//		scanf("%d", &arr2[i]);
//		SLTPushBack(&s2, arr2[i]);
//	}
//	while (s1 != NULL && s2 != NULL)
//	{
//		int sum = s1->data + s2->data;
//		s1 = s1->next;
//		s2 = s2->next;
//		SLTPushBack(&s3, sum);
//	}
//	SLTPrint(s3);
//	//SListDesTroy(&s3);
//	return 0;
//}


//链表删除
//int main()
//{
//	SLTNode* s = NULL;
//	SLTNode* s1 = NULL;
//	int n = 0;
//	int x = 0;
//	int arr[200];
//	scanf("%d %d", &n, &x);
//	for (int i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//		SLTPushBack(&s, arr[i]);
//	}
//	while (s!=NULL)
//	{
//		if (s->data != x)
//		{
//			SLTPushBack(&s1, s->data);
//		}
//		s = s->next;
//	}
//	SLTPrint(s1);
//	return 0;
//}

void pos(SLTNode* phead, SLTDataType x)
{
	
	SLTNode* newnode = SLTBuyNode(x);
	SLTNode* cur = phead;
	SLTNode* prev = NULL;
	int j = 0;
	while (j < x)
	{
		prev = cur;
		cur = cur->next;
		j++;
	}
	prev->next = newnode;
	newnode->next = cur;
}
//添加节点
int main()
{
	SLTNode* s = NULL;
	int n = 0;
	int i = 0;
	int arr[200];
	scanf("%d %d", &n, &i);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
		SLTPushBack(&s, arr[i]);
	}
	pos(s, i);
	SLTPrint(s);
	return 0;
}